package cn.com.seederland.gkrpc.client;

import cn.com.seederland.gkrpc.Peer;
import cn.com.seeederland.gkrpc.transport.TransportClient;

import java.util.List;

/**
 * @ClassName TransportSelector
 * @Author SighFate
 * @Date 2020/10/07 1:07
 * @Version 1.0
 * @Description 表示选择哪个Server去连接
 */
public interface TransportSelector {
    /**
     * 初始化Selector
     * @param peerList 表示可以连接的server端点信息
     * @param count client与server可以创建多少个连接
     * @param clazz client实现class
     */
    void init(List<Peer> peerList, int count, Class<? extends  TransportClient> clazz);

    /**
     * 选择一个transport与server做交互
     * @return
     */
    TransportClient select();

    /**
     * 释放用完的client
     * @param client
     */
    void release(TransportClient client);

    /**
     * 关闭资源连接
     */
    void close();
}
